/*
 * sock.c
 *
 *  Created on: 05/11/2011
 *      Author: utn_so
 */

#include "sock.h"

/*Se incluyen las funciones de servidor mas el connect para clientes, el envio y la
recepcion de datos. A nivel servidor esta testeado y a nivel cliente tambien. No
se hicieron pruebas sobre send y recv puesto que no deberian implicar ninguna
problematica.*/

/*________________________________________________________________________________*/

int iniciarSocketA(int* nuevoSocket){

	*nuevoSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

		if (*nuevoSocket == ERROR) {
			printf("Error en socket()\n");
			return 1;
		}
		else
			return 0;
}

/*________________________________________________________________________________*/

int realizarBindA(int nuevoSocket,struct sockaddr_in local){

	int resultado;

	resultado = bind(nuevoSocket, (struct sockaddr*)&local, sizeof(local));

	if(resultado == ERROR){
		printf("Fallo bind()\n");
		return 1;
	}
	else
		return 0;
}

/*________________________________________________________________________________*/

int realizarListenA(int nuevoSocket){

	int resultado;

	resultado = listen(nuevoSocket,1);

	if (resultado == ERROR) {
		printf("Fallo listen()\n");
		return 1;
	}
	else
		return 0;

}

/*________________________________________________________________________________*/

int aceptarClienteA(int nuevoSocket,struct sockaddr_in local){

	int socketCliente;


	int len = sizeof(struct sockaddr);

	socketCliente=accept(nuevoSocket,(struct sockaddr*) &local,&len);

	if(socketCliente == ERROR) {
			printf("Fallo accept()\n");
			return 1;
	}
	else{
		//printf("conecto!");
		return socketCliente;
	}
}

/*________________________________________________________________________________*/

int conectarSocketA(int nuevoSocket,struct sockaddr_in local){

	int resultado;

	resultado = connect(nuevoSocket, (struct sockaddr*)&local, sizeof(local)) ;

	if(resultado == ERROR){
		printf("Error en connect()\n");
		return 1;
	}
	else
		return 0;
}

/*________________________________________________________________________________*/

int enviarDatosA(char*buffer,int tamanio,int socketEnvio){

	int resultado;
	resultado = send(socketEnvio,buffer,tamanio,0);

	if(resultado == ERROR){
		printf("Error en send()\n");
		return 1;
	}
	else{
		//printf("Envio exitoso\n");
		return 0;
	}

}

/*________________________________________________________________________________*/

int recibirDatosA(char*buffer,int socketRecv){

	int resultado;

	resultado = recv(socketRecv,buffer,519,MSG_WAITALL);

	return resultado;

}

/*________________________________________________________________________________*/

int cerrarSocketA(int* nuevoSocket){

	int resultado;

	resultado = close(*nuevoSocket);

	if (resultado == ERROR){
		printf("Error en closesocket()\n");
		return 1;
	}
	else
		return 0;
}

/*________________________________________________________________________________*/
